package com.vito.email;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SimpleMailSenderExt{
	
	private static final Logger log = LoggerFactory.getLogger(SimpleMailSenderExt.class);
	/**   
	  * 以文本格式发送邮件   
	  * @param mailInfo 待发送的邮件的信息   
	 * @throws UnsupportedEncodingException 
	  */    
	    public boolean sendTextMail(MailSenderInfoExt mailInfo) throws UnsupportedEncodingException {    
	      // 判断是否需要身份认证    
	      MyAuthenticator authenticator = null;    
	      Properties pro = mailInfo.getProperties();   
	      if (MailSenderInfoExt.validate) {    
	      // 如果需要身份认证，则创建一个密码验证器    
	        authenticator = new MyAuthenticator(MailSenderInfoExt.userName, MailSenderInfoExt.password);
	      }   
	      // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
	      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
	      try {    
	      // 根据session创建一个邮件消息    
	      Message mailMessage = new MimeMessage(sendMailSession);    
	      // 创建邮件发送者地址    
	     // 创建邮件发送者地址    
         String nick="";  
         try {  
             nick=javax.mail.internet.MimeUtility.encodeText(mailInfo.getFromNick());  
         } catch (UnsupportedEncodingException e) {  
             e.printStackTrace();  
         } 
         Address from = new InternetAddress(mailInfo.getFromAddress(),nick);
         // 设置邮件消息的发送者    
         mailMessage.setFrom(from);    
	      // 创建邮件的接收者地址，并设置到邮件消息中    
	      Address to = new InternetAddress(mailInfo.getToAddress());    
	      mailMessage.setRecipient(Message.RecipientType.TO,to);    
	      // 设置邮件消息的主题    
	      mailMessage.setSubject(mailInfo.getSubject());    
	      // 设置邮件消息发送的时间    
	      mailMessage.setSentDate(new Date());    
	      // 设置邮件消息的主要内容    
	      String mailContent = mailInfo.getContent();    
	      mailMessage.setText(mailContent);    
	      // 发送邮件    
	      Transport.send(mailMessage);   
	      return true;    
	      } catch (MessagingException ex) {    
	          ex.printStackTrace();    
	      }    
	      return false;
	    }
	    public boolean sendHtmlMail(MailSenderInfoExt mailInfo) throws MessagingException, IOException{    
	        // 判断是否需要身份认证    
	        MyAuthenticator authenticator = null;   
	        Properties pro = mailInfo.getProperties();   
	        //如果需要身份认证，则创建一个密码验证器     
	        if (MailSenderInfoExt.validate) {    
	          authenticator = new MyAuthenticator(MailSenderInfoExt.userName, MailSenderInfoExt.password);
	        }    
	        // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
	        Session sendMailSession = Session.getDefaultInstance(pro,authenticator);    
	        // 根据session创建一个邮件消息    
	        Message mailMessage = new MimeMessage(sendMailSession);    
	        // 创建邮件发送者地址    
	        String nick="";  
	        try {  
	            nick=javax.mail.internet.MimeUtility.encodeText(mailInfo.getFromNick());  
	        } catch (UnsupportedEncodingException e) {  
	            e.printStackTrace();  
	        } 
	        Address from = new InternetAddress(mailInfo.getFromAddress(),nick);
	        // 设置邮件消息的发送者    
	        mailMessage.setFrom(from);    
	        // 创建邮件的接收者地址，并设置到邮件消息中    
	        Address to = new InternetAddress(mailInfo.getToAddress(), MimeUtility.encodeText(mailInfo.getNick()));    
	        // Message.RecipientType.TO属性表示接收者的类型为TO    
	        mailMessage.setRecipient(Message.RecipientType.TO,to);    
	        // 设置邮件消息的主题    
	        mailMessage.setSubject(mailInfo.getSubject());    
	        // 设置邮件消息发送的时间    
	        mailMessage.setSentDate(new Date());    
	        // MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象    
	        Multipart mainPart = new MimeMultipart();    
	        // 创建一个包含HTML内容的MimeBodyPart    
	        BodyPart html = new MimeBodyPart();    
	        // 设置HTML内容    
	        log.info(mailInfo.getContent());
	        html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
	        log.info(html.getContent().toString());
	        mainPart.addBodyPart(html);
	        // 将MiniMultipart对象设置为邮件内容    
	        mailMessage.setContent(mainPart);    
	        // 发送邮件    
	        Transport.send(mailMessage);
	        return true;    
	      }    
}
